<%@page import="com.struts.action.PersonComparator"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="com.struts.action.Person"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

   <s:debug></s:debug>
   <br/>
   s:property:打印值栈中的属性值的：对于对象栈，打印值栈中对应的属性值
   <br><br>
   <s:property value="productName"/>
   <br><br>
       对于Map栈，打印request,session,application的某个属性值或某个请求参数的值
   <br><br>
   <s:property value="#session.date"/>
   <br><br>
   <s:property value="#parameters.name"/>
   <br><br>
   
   s:url:创建一个URL字符串的
   <br><br>
   <s:url value="/testUrl" var="url" ></s:url>
   ${url }
   <br><br>
   <s:url value="/getProduct" var="url" >
      <s:param name="productId" value="1002"></s:param>
   </s:url>
   ${url }
   <br><br>
   <s:url value="/getProduct" var="url" >
      <!-- 对于value值会自动的进行OGNL解析！ -->
      <s:param name="productId" value="productId"></s:param>
   </s:url>
   ${url }
   <br><br>
   <s:url value="/getProduct" var="url" >
      <!-- 对于value值会自动的进行OGNL解析！若不进行自动解析，则用''将value的值括起来 -->
      <s:param name="productId" value="'abcd'"></s:param>
   </s:url>
   ${url }
   
   <br><br>
   s:set:向page,request,session,application域对象中加入一个属性值
   <br><br>
   <!-- 对value属性值自动的进行OGNL解析 -->
   <s:set name="productName" value="'acer'" scope="request"></s:set>
   productName:${requestScope.productName }
   <br><br>
   
   s:push:把一个对象在标签开始后压入到值栈中，标签结束时，弹出值栈
   <br><br>
   <%
      Person person=new Person();
      person.setName("张三");
      person.setAge(28);
      
      request.setAttribute("person", person);
   %>
   <s:push value="#request.person">
      ${name }
   </s:push>
   <br><br>
   <!-- 标签结束后，弹出了push压入的值 -->
   --${name }--
   <br><br>
   
   s:if,s:else,s:elseif;
   <!-- 可以直接使用值栈中的属性 -->
   <br><br>
   <s:if test="productPrice>1000">
      i7处理器
   </s:if>
   <s:elseif test="productPrice>800">
      i5处理器
   </s:elseif>
   <s:else>
      i3处理器
   </s:else>
   <br><br>
   
   s:iterator:遍历集合的。把这个可遍历对象里的每一个元素一次压入和弹出
   <br><br>
   <%
      List<Person> list=new ArrayList<>();
      list.add(new Person("aaa",40));
      list.add(new Person("bbb",20));
      list.add(new Person("ccc",30));
      request.setAttribute("list", list);
   %>
   <s:iterator value="#request.list">
     ${name } - ${age }<br>
   </s:iterator>
   <br><br>
   <s:iterator value="list" status="status">
     index:${status.index } - count:${status.count }: ${name } - ${age }<br>
   </s:iterator>
   <br><br>
   
   s:sort 可以对集合中的元素进行排序  PersonComparator
   <br><br>
   <%
      PersonComparator pc=new PersonComparator();
      request.setAttribute("comparator", pc);
   %>
   <s:sort comparator="#request.comparator" source="list" var="person2"></s:sort> 
   <s:iterator value="#attr.person2">
      ${name } - ${age }<br>
   </s:iterator>
   <br><br>
   
   s:date 可以对Date 对象进行排版
   <br><br>
   <s:date name="#session.date" format="yyyy-MM-dd hh:mm:ss" var="date2" />
   date:${date2 }
   <br><br>
   
   s:a标签
   <!-- 需要对域中的属性进行强制OGNL解析,以%{属性 }%表示 -->
   <br><br>
   <s:iterator value="list">
     <s:a href="getPerson.action?name=%{name}%">${name }</s:a>
   </s:iterator>
   
</body>
</html>